iT邦幫忙

2026 iThome 鐵人賽

DAY 3
0
自我挑戰組

Python 爬蟲與資料分析實戰:從網路資料到資訊視覺化系列 第 8

Day 8|HTML 網頁結構與 BeautifulSoup:開始解析網頁資料

  • 分享至 

  • xImage
  •  

昨天第一次使用 Requests 從網站取得 HTML,今天就要處理昨天留下來的問題:

HTML 抓回來之後,要怎麼從裡面找到自己想要的資料?

如果只使用:

print(response.text)

看到的會是一大串 HTML,真正做爬蟲時不可能靠肉眼一個一個找。

所以今天開始學習 BeautifulSoup,讓 Python 可以解析 HTML,並從網頁中找到特定的標籤和內容。

一、先了解 HTML 的基本結構

先看一個簡單的 HTML:

<h1>商品列表</h1>

<div>
    <h2>無線耳機</h2>
    <p>價格:1990 元</p>
</div>

<div>
    <h2>機械鍵盤</h2>
    <p>價格:2500 元</p>
</div>

HTML 是由很多「標籤」組成的。

例如:

h1 是標籤,而中間的:

商品列表

就是內容。

另外:

p 通常用來表示一段文字。

做爬蟲時,我們就是利用這些 HTML 結構找到需要的資料。

二、在 Colab 安裝 BeautifulSoup

Google Colab 通常可以直接使用 BeautifulSoup。

先執行:

from bs4 import BeautifulSoup

如果環境沒有安裝,也可以執行:

!pip install beautifulsoup4

然後:

from bs4 import BeautifulSoup
三、先自己建立一個 HTML 練習

今天先不要直接對複雜網站下手,我先自己建立一個簡單的 HTML。

html = """

<h1>商品列表</h1>

<div>
    <h2>無線耳機</h2>
    <p>價格:1990 元</p>
</div>

<div>
    <h2>機械鍵盤</h2>
    <p>價格:2500 元</p>
</div>

<div>
    <h2>滑鼠</h2>
    <p>價格:890 元</p>
</div>

現在這個 html 其實只是一個 Python 字串。

接著交給 BeautifulSoup:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")

print(soup)

這時候 BeautifulSoup 就會把 HTML 解析成比較容易操作的結構。

四、取得網頁標題

HTML 裡面有:

可以使用:

print(soup.title)

結果:

但如果只想要文字:

print(soup.title.text)

結果:

商品網站

也可以寫:

print(soup.title.get_text())
五、使用 find 找資料

假設我要找:

可以:

title = soup.find("h1")

print(title)

結果:

如果只想取得文字:

print(title.text)

結果:

商品列表

所以:

soup.find("h1")

就是尋找第一個 h1 標籤。

六、找所有商品名稱

現在網頁裡有三個:

如果使用:

soup.find("h2")

只會找到第一個。

如果要全部找出來,就使用:

products = soup.find_all("h2")

for product in products:
print(product.text)

結果:

無線耳機
機械鍵盤
滑鼠

這裡又用到了之前學過的 for。

所以現在開始可以看到之前學的東西慢慢串起來:

HTML

BeautifulSoup

find_all()

List

for

取得資料
七、找商品價格

價格放在:

所以可以:

prices = soup.find_all("p")

for price in prices:
print(price.text)

結果:

價格:1990 元
價格:2500 元
價格:890 元

這樣就成功把商品價格抓出來了。

八、Requests + BeautifulSoup

剛剛的 HTML 是自己建立的。

但真正的爬蟲不能永遠自己建立 HTML,所以現在把 Day 7 的 Requests 加回來。

import requests
from bs4 import BeautifulSoup

url = "https://example.com"

response = requests.get(url)

soup = BeautifulSoup(response.text, "html.parser")

print(soup.title.text)

這裡的流程就是:

requests.get()

取得 HTML

response.text

BeautifulSoup

解析 HTML

找出需要的資料

這就是最基本的爬蟲流程。

九、今天的完整實作

最後把今天的內容整理成一個完整練習。

import requests
from bs4 import BeautifulSoup

url = "https://example.com"

try:
response = requests.get(url)

response.raise_for_status()

soup = BeautifulSoup(response.text, "html.parser")

print("網站標題:")
print(soup.title.text)

print("\n網頁中的文字:")
print(soup.get_text()[:500])

except requests.exceptions.RequestException as e:
print("網站連線錯誤:", e)

這段程式同時使用了前幾天學到的:

import
try / except
requests
for(之後會使用)
HTML
BeautifulSoup
十、自己做一個商品爬蟲練習

最後我自己建立一個比較像商品網站的 HTML。

html = """

解析:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")

products = soup.find_all("div", class_="product")

for product in products:

name = product.find("h2").text
price = product.find("p", class_="price").text

print("商品:", name)
print("價格:", price)
print()

結果:

商品: 無線耳機
價格: 1990

商品: 機械鍵盤
價格: 2500

商品: 滑鼠
價格: 890

這次就不是單純把所有 h2 和 p 分開抓,而是先找到每一個商品的區塊,再從商品區塊裡面找到名稱和價格。

這種方式會更接近之後真正做商品爬蟲的情況。


上一篇
Day 7|Python 網路基礎:HTTP 與 Requests
系列文
Python 爬蟲與資料分析實戰:從網路資料到資訊視覺化8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言